home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / MAKEMSG.F < prev    next >
Text File  |  1980-01-01  |  4KB  |  211 lines

  1. #inpend=0
  2. #errors off
  3. curtoloc
  4. print cr "Make Message Files for FAST, written by Peter Campbell. v1"
  5. changed=0
  6. var file_len,len,ms,current,msg
  7. const ml=72
  8.  
  9. #include extinput.fi
  10.  
  11. proc abort
  12.     {
  13.     cursor 24,0:print bios
  14.     if error=0 then
  15.     {
  16.     while changed
  17.         {
  18.         print bios "Save changed file? [Y] ";
  19.         wait_yesno:
  20.         wait for keypressed
  21.         k=ucase key
  22.         if k='N' then print bios "N":goto finish_abort
  23.         if (k<>13) and (k<>'Y') then goto wait_yesno
  24.         print bios "Y"
  25.         create #1,name+2
  26.         write #1,file_len from ms|0:if error then goto save_error
  27.         close #1
  28.         terminate ;No beep.
  29.  
  30.         save_error:
  31.         print bios "Error saving file.":beep
  32.         }
  33.     }
  34.     finish_abort:
  35.     beep:terminate
  36.     }
  37.  
  38. ms=allocate 16384/16:if error then print "Out of memory, needs 22k.":abort
  39.  
  40. function find_msg(nn)
  41.     {
  42.     default=file_len
  43.     m=0
  44.     while m below file_len
  45.     {
  46.     z=ms[m]b:m++
  47.     if z=0 then
  48.         {
  49.         num=ms[m]:m+=2
  50.         if num=nn then return m-3
  51.         if num>nn then default=m-3:return -1
  52.         }
  53.     }
  54.     return -1
  55.     }
  56.  
  57. proc delete_message
  58.     {
  59.     msg_next=msg+3
  60.     while (ms[msg_next]b<>0) and (msg_next below file_len) msg_next++
  61.     moveb file_len-msg_next+1 from ms|msg_next to ms|msg
  62.     file_len-=msg_next-msg
  63.     changed=1
  64.     }
  65.  
  66. proc edit_message(edx)
  67.     {
  68.     if edx then
  69.     {
  70.     msg_next=msg+3
  71.     while (ms[msg_next]b<>0) and (msg_next below file_len) msg_next++
  72.     fillb ml from message with ' '
  73.     moveb msg_next-msg-3 from ms|msg+3 to message
  74.     }
  75.     locate 23,1
  76.     len=ext_input(message_string)-1
  77.     if len<>-1 then
  78.     {
  79.     if edx then delete_message
  80.     if len then
  81.         {
  82.         moveb file_len-msg from ms|msg to ms|msg+len+3
  83.         ms[msg]b=0
  84.         ms[msg+1]=current
  85.         moveb len from message to ms|msg+3
  86.         file_len+=len+3
  87.         }
  88.     changed=1
  89.     }
  90.     }
  91.  
  92. proc display(nn)
  93.     {
  94.     cls
  95.     locate 0,0:colour 120
  96.     print " MESSAGES ";
  97.     colour 7
  98.     print "  File: ";
  99.     colour 15:m=name+2:while peekb m print chr peek m;:m++
  100.     colour 7
  101.     print "  (";file_len;" bytes)." cr
  102.  
  103.     if nn<0 then nn=0
  104.     if nn then    ;If zero then just list all.
  105.     {
  106.     nn=find_msg(nn)
  107.     if nn=-1 then nn=default
  108.     }
  109.  
  110.     while nn below file_len
  111.     {
  112.     z=ms[nn]b:nn++
  113.     if z then print "????? ?";:goto next_msg
  114.     num=ms[nn]:nn+=2
  115.     colour 7:if num=current then colour 15
  116.     print num;" ";
  117.     while (ms[nn]b<>0) and (nn below file_len) print chr ms[nn];:nn++
  118.     if nn=file_len then goto end_disp
  119.  
  120.     next_msg:
  121.     print
  122.     if locpos>=21*160 then goto end_disp
  123.     }
  124.  
  125.     end_disp:
  126.     locate 21,0:repeat 80 print chr 205;
  127.     locate 24,0:repeat 80 print chr 205;
  128.     locate 23,0:print "[";:locate 23,ml+1:print "]";
  129.     colour 15
  130.     locate 22,0
  131.     print "Message number to modify/delete/view or add: (p=print) ";
  132.     }
  133.  
  134. print cr "Edit/Create file: ";
  135. loctocur
  136. inputs name
  137. print
  138. if peekb (name+2)=0 then abort
  139.  
  140. open #1,name+2
  141. if error then
  142.     {
  143.     create #1,name+2
  144.     if error then print "Can't create file!":abort
  145.     }
  146.  
  147. file_len=read #1,16384 to ms|0
  148. close #1
  149. if error then print "Can't read file!":abort
  150. if file_len=16384 then print "File truncated, more than 16k.":beep
  151.  
  152. current=0
  153.  
  154. forever
  155.     {
  156.     start_disp:
  157.     display(current-19)
  158.     loctocur
  159.     current=input
  160.     if current<0 then
  161.     {
  162.     print bios " (valid range is 1-32767)":beep
  163.     repeat 40000 {}
  164.     goto start_disp
  165.     }
  166.     if not current then
  167.     {
  168.     if video[locpos]b='0' then current=0:goto start_disp
  169.     if video[locpos]b='p' then
  170.         {
  171.         lprint " MESSAGES   File: ";
  172.         m=name+2:while peekb m lprint chr peek m;:m++
  173.         lprint "  (";file_len;" bytes)." cr lf
  174.  
  175.         nn=0
  176.         while nn below file_len
  177.         {
  178.         z=ms[nn]b:nn++
  179.         if z then lprint "????? ?";:goto lnext_msg
  180.         lprint ms[nn];" ";:nn+=2
  181.         while (ms[nn]b<>0) and (nn below file_len) lprint chr ms[nn];:nn++
  182.         if nn=file_len then goto start_disp
  183.  
  184.         lnext_msg:
  185.         lprint
  186.         }
  187.         goto start_disp
  188.         }
  189.     abort
  190.     }
  191.  
  192.     display(current-19):print current;
  193.     locate 23,1
  194.     msg=find_msg(current)
  195.     if msg=-1 then
  196.     {
  197.     fillb ml from message with ' '
  198.     msg=default
  199.     edit_message(0)
  200.     }
  201.     else edit_message(1)
  202.     }
  203.  
  204. name:
  205. string 30
  206.  
  207. message_string:
  208. datab ml,0
  209. message:
  210. space ml+1
  211.